<template>
<!-- 问题：我们不知道什么时候能够拿到 max 值，但是，总归有一个真正的 max 值 -->
<!-- 我们可以 使用 watch 属性监听，来 监听 父组件传递过来的 max 值，不管 watch 会被触发几次，但是，最后一次，肯定是一个 合法的 max 数值 -->
  <div class="mui-numbox" data-numbox-min='1' :data-numbox-max='max'> <!-- data-numbox-max 是 MUI 中表示数字框的最大值 -->
    <button class="mui-btn mui-btn-numbox-minus" type="button">-</button>
    <!-- 监听文本框的 change 事件，来动态获取选择到的数量 -->
    <input id="test" class="mui-input-numbox" type="number" value="1" ref="numbox" @change="countChanged" /><!-- @change 表示每当值被修改了触发的事件 -->
    <button class="mui-btn mui-btn-numbox-plus" type="button">+</button>
  </div>

  <!-- 分析：子组件什么时候把 数据传递给父组件 -->
</template>

<script>
// 导入 mui 从而支持 初始化 数字框
import mui from "../../lib/mui/js/mui.min.js";

export default {
  data() {
    return {};
  },
  mounted() { // MUI 要求再使用数字框前要初始化
    // 当组件挂载到页面中之后，去初始化 数字框
    // console.log(this.max); // undefined，因为此时可能页面渲染了 数字框但还没拿到 goodsinfo
    mui(".mui-numbox").numbox();
  },
  methods: {
    countChanged() {
      // 每当 文本框的数据被修改的时候，立即把 最新的数据，通过事件调用，传递给父组件
      // console.log(this.$refs.numbox.value);
      
      const val = this.$refs.numbox.value;
      // 每当 nobox 子组件中的 count 变化之后，要立即把 最新的数量值，传递给goodsinfo父组件， 这样，每当我们点击 【加入购物车】按钮时候，就能立即把 最新的 count 值，同步到 购物车的徽标中
      // 这样就涉及到了父子组件传值，子组件向父组件传递数据
      this.$emit("getcount", parseInt(val));
    }
  },
  props:["max"],
  watch:{ // 不加监听就算其他逻辑合法了也无法获取到 父组件GoodsInfo.vue 传过来的 max 值；因为此时可能页面渲染了 数字框但还没拿到 goodsinfo
    // 属性监听
    'max':function(newval,oldval) {
      // 不论外界传递给 numbox 的 max 值到底是什么；
      // 最终，最后传递的那个 max 值，肯定是一个 合法的数值；
      // console.log(newval + " --- " + oldval);
      // 每当 监听到 max 值的改变，不论这个值是否合法，我们都重新为 数字框 ，使用 JS API，来手动设置最大值
      mui(".mui-numbox").numbox().setOption("max", newval); // 将最终获得的值赋给max，这是 MUI 中使用 JS API 设置 numbox 最大值的方法
    }
  }
};
</script>

<style lang="scss" scoped>

</style>
